package com.wjh.anyview.service;

import com.wjh.anyview.entity.bo.examServiceBo.*;
import com.wjh.anyview.entity.dto.CommonResult;
import com.wjh.anyview.entity.po.Exam;
import com.wjh.anyview.entity.po.Question;
import com.wjh.anyview.entity.vo.examControllerVo.ExamTeacherVo;
import com.wjh.anyview.entity.vo.examControllerVo.ExamVo;

import java.util.List;

/**
 * @author wjh
 * @date 2021/10/9 18:52
 * @Package com.wjh.anyview.service
 */
public interface ExamService {

    /**
     * 通过clazzId查询考试
     *
     * @param clazzId 班级id
     * @return 返回考试合集
     */
    CommonResult<List<ExamVo>> listExamByClazzId(Long clazzId);

    /**
     * 提交答案
     *
     * @param finishBo 答案封装类
     * @return 没有数据返回
     */
    CommonResult<?> finish(FinishBo finishBo);

    /**
     * 给某课程安排考试
     *
     * @param arrangeExamBo 安排考试需要的相关信息的封装类
     * @return 没有数据返回
     */
    CommonResult<?> arrangeExamByCourseId(ArrangeExamBo arrangeExamBo);

    /**
     * 判断考试安排是否有时间冲突
     *
     * @param timeConflictBo 考试安排的封装类
     * @return 返回判断结果
     */
    boolean judgeTimeConflict(TimeConflictBo timeConflictBo);

    /**
     * 根据courseId查询考试对象
     *
     * @param courseId 课程id
     * @return 返回考试视图层对象
     */
    CommonResult<ExamVo> getExamByCourseId(Long courseId);

    /**
     * 根据监考老师id查询考试
     *
     * @param invigilatorId 监考老师id
     * @return List<ExamVo>
     */
    CommonResult<List<ExamTeacherVo>> listExamByInvigilatorId(Long invigilatorId);

    /**
     * 开始考试操作
     *
     * @param beginExamBo examId、准备时间的封装参数
     * @return 返回需要进行该场考试的学号集合
     */
    CommonResult<List<String>> beginExam(BeginExamBo beginExamBo);

    /**
     * 通过examId来查询需要考试的学号集合
     *
     * @param examId 考试id
     * @return 返回学号集合
     */
    List<String> listNumByExamId(Long examId);

    /**
     * 提交答案的业务
     *
     * @param submitAnswerBo 答案封装类
     * @return 没有数据返回
     */
    CommonResult<?> submitAnswer(SubmitAnswerBo submitAnswerBo);

    /**
     * 查询考生提交的答案
     *
     * @param queryAnswerBo 考试id和s_id
     * @return 考生提交的考试答案集合
     */
    CommonResult<List<String>> queryAnswer(QueryAnswerBo queryAnswerBo);

    /**
     * 查询学生答案
     *
     * @param numAndExamIdBo num、examId
     * @return 集合
     */
    CommonResult<List<Question>> listStudentAnswerByNumAndExamId(NumAndExamIdBo numAndExamIdBo);

    /**
     * 老师给考生答题评分
     *
     * @param markBo 评分bo
     * @return 没有数据返回
     */
    CommonResult<?> mark(MarkBo markBo);
}
